package com.yunshan.system.test;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

/**
 * @Author: wss
 * @DateTime: 2025/2/25 11:20
 **/
public class WeChatUtils {
    // 获取公众号 access_token 的 URL
    private static final String ACCESS_TOKEN_URL = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s";

    /**
     * 获取微信公众号的 access_token
     *
     * @param appid  公众号的 appid
     * @param secret 公众号的 secret
     * @return access_token
     */
    public static String getAccessToken(String appid, String secret) {
        String url = String.format(ACCESS_TOKEN_URL, appid, secret);

        try {
            // 创建 URL 对象
            URL obj = new URL(url);
            // 打开连接
            HttpURLConnection con = (HttpURLConnection) obj.openConnection();
            con.setRequestMethod("GET");

            // 读取返回结果
            BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
            String inputLine;
            StringBuilder response = new StringBuilder();
            while ((inputLine = in.readLine()) != null) {
                response.append(inputLine);
            }
            in.close();

            // 解析返回的 JSON 数据，获取 access_token
            String jsonResponse = response.toString();
            String accessToken = extractAccessToken(jsonResponse);

            if (accessToken != null) {
                return accessToken;
            } else {
                throw new Exception("获取 access_token 失败，返回：" + jsonResponse);
            }

        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * 从 JSON 响应中提取 access_token
     *
     * @param jsonResponse 微信 API 返回的 JSON 字符串
     * @return access_token
     */
    private static String extractAccessToken(String jsonResponse) {
        // 使用简单的字符串查找提取 access_token（更建议使用 JSON 解析库如 Jackson 或 Gson）
        String tokenPrefix = "\"access_token\":\"";
        String tokenSuffix = "\"";

        int start = jsonResponse.indexOf(tokenPrefix);
        if (start != -1) {
            start += tokenPrefix.length();
            int end = jsonResponse.indexOf(tokenSuffix, start);
            if (end != -1) {
                return jsonResponse.substring(start, end);
            }
        }
        return null;
    }

    public static void main(String[] args) {
        // 示例：替换成你自己的 appid 和 secret
        String appid = "YOUR_APPID";  // 填入公众号的 appid
        String secret = "YOUR_SECRET";  // 填入公众号的 secret

        String accessToken = getAccessToken(appid, secret);
        if (accessToken != null) {
            System.out.println("获取的 access_token：" + accessToken);
        } else {
            System.out.println("获取 access_token 失败！");
        }
    }
}
